λ°μν νλ‘κ·Έλλ°μμ μ΅μ λ² ν¨ν΄μ μ리, μ₯μ , ꡬν μμ λ° λ°μν/νμ₯ κ°λ₯ν μννΈμ¨μ΄ ꡬμΆμ μν μ€μ μ μ© μ¬λ‘λ₯Ό νꡬν©λλ€.
λ°μν νλ‘κ·Έλλ°: μ΅μ λ² ν¨ν΄ λ§μ€ν°νκΈ°
λμμμ΄ μ§ννλ μννΈμ¨μ΄ κ°λ° νκ²½μμ λ°μνμ΄κ³ νμ₯ κ°λ₯νλ©° μ μ§λ³΄μ κ°λ₯ν μ ν리μΌμ΄μ μ ꡬμΆνλ κ²μ 무μλ³΄λ€ μ€μν©λλ€. λ°μν νλ‘κ·Έλλ°μ λΉλκΈ° λ°μ΄ν° μ€νΈλ¦Όκ³Ό λ³κ²½ μ νμ μ€μ μ λ ν¨λ¬λ€μ μ νμ μ 곡ν©λλ€. μ΄ μ κ·Ό λ°©μμ μ΄μμ κ°μ²΄ κ°μ μΌλλ€ μ’ μμ±μ μ μνλ νλ λμμΈ ν¨ν΄μΈ μ΅μ λ² ν¨ν΄μΌλ‘, ν κ°μ²΄(주체)κ° λͺ¨λ μ’ μ κ°μ²΄(μ΅μ λ²)μκ² μν λ³κ²½μ μλμΌλ‘ μ릴 μ μλλ‘ ν©λλ€.
μ΅μ λ² ν¨ν΄ μ΄ν΄νκΈ°
μ΅μ λ² ν¨ν΄μ 주체μ μ΅μ λ²λ₯Ό μ°μνκ² λΆλ¦¬ν©λλ€. μ£Όμ²΄κ° μ΅μ λ²λ₯Ό μκ³ μ§μ λ©μλλ₯Ό νΈμΆνλ λμ , μ΅μ λ² λͺ©λ‘μ μ μ§νκ³ μν λ³κ²½μ μ립λλ€. μ΄λ¬ν λΆλ¦¬λ μ½λλ² μ΄μ€μ λͺ¨λμ±, μ μ°μ± λ° ν μ€νΈ μ©μ΄μ±μ μ΄μ§ν©λλ€.
μ£Όμ κ΅¬μ± μμ:
- 주체 (Subject, Observable): μνκ° λ³κ²½λλ κ°μ²΄μ λλ€. μ΅μ λ² λͺ©λ‘μ μ μ§νκ³ μ΅μ λ²λ₯Ό μΆκ°, μ κ±° λ° μ리λ λ©μλλ₯Ό μ 곡ν©λλ€.
- μ΅μ λ² (Observer): 주체μ μνκ° λ³κ²½λ λ νΈμΆλλ `update()` λ©μλλ₯Ό μ μνλ μΈν°νμ΄μ€ λλ μΆμ ν΄λμ€μ λλ€.
- ꡬ체μ μΈ μ£Όμ²΄ (Concrete Subject): μνλ₯Ό μ μ§νκ³ μ΅μ λ²μκ² μ리λ μν μ νλ 주체μ ꡬ체μ μΈ κ΅¬ν체μ λλ€.
- ꡬ체μ μΈ μ΅μ λ² (Concrete Observer): μ£Όμ²΄κ° μ리λ μν λ³κ²½μ λ°μνλ μν μ νλ μ΅μ λ²μ ꡬ체μ μΈ κ΅¬ν체μ λλ€.
μ€μ μ¬λ‘ λΉμ :
λ΄μ€ κΈ°κ΄(주체)κ³Ό ꡬλ μ(μ΅μ λ²)λ₯Ό μκ°ν΄ 보μΈμ. λ΄μ€ κΈ°κ΄μ΄ μ κΈ°μ¬λ₯Ό λ°ν(μν λ³κ²½)νλ©΄ λͺ¨λ ꡬλ μμκ² μλ¦Όμ 보λ λλ€. ꡬλ μλ μ 보λ₯Ό μλΉνκ³ κ·Έμ λ°λΌ λ°μν©λλ€. μ΄λ€ ꡬλ μλ λ€λ₯Έ ꡬλ μμ μΈλΆ μ 보λ₯Ό μμ§ λͺ»νλ©°, λ΄μ€ κΈ°κ΄μ μλΉμμ λν κ±±μ μμ΄ μ€μ§ λ°νμλ§ μ§μ€ν©λλ€.
μ΅μ λ² ν¨ν΄ μ¬μ©μ μ΄μ
μ΅μ λ² ν¨ν΄μ ꡬννλ©΄ μ ν리μΌμ΄μ μ μλ§μ μ΄μ μ μ 곡ν©λλ€:
- λμ¨ν κ²°ν©: 주체μ μ΅μ λ²λ λ 립μ μ΄μ΄μ μ’ μμ±μ μ€μ΄κ³ λͺ¨λμ±μ μ΄μ§ν©λλ€. μ΄λ λ€λ₯Έ λΆλΆμ μν₯μ μ£Όμ§ μκ³ μμ€ν μ λ μ½κ² μμ νκ³ νμ₯ν μ μλλ‘ ν©λλ€.
- νμ₯μ±: 주체λ₯Ό μμ νμ§ μκ³ λ μ΅μ λ²λ₯Ό μ½κ² μΆκ°νκ±°λ μ κ±°ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ λ λ§μ μ΅μ λ²λ₯Ό μΆκ°νμ¬ μ¦κ°λ μν¬λ‘λ(workload)λ₯Ό μ²λ¦¬ν¨μΌλ‘μ¨ μ ν리μΌμ΄μ μ μνμ μΌλ‘ νμ₯ν μ μμ΅λλ€.
- μ¬μ¬μ©μ±: 주체μ μ΅μ λ² λͺ¨λ λ€λ₯Έ 컨ν μ€νΈμμ μ¬μ¬μ©λ μ μμ΅λλ€. μ΄λ μ½λ μ€λ³΅μ μ€μ΄κ³ μ μ§λ³΄μμ±μ ν₯μμν΅λλ€.
- μ μ°μ±: μ΅μ λ²λ μν λ³κ²½μ λ€μν λ°©μμΌλ‘ λ°μν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ λ³κ²½λλ μꡬμ¬νμ μ ν리μΌμ΄μ μ λ§μΆ μ μμ΅λλ€.
- ν₯μλ ν μ€νΈ μ©μ΄μ±: ν¨ν΄μ λΆλ¦¬λ νΉμ±μΌλ‘ μΈν΄ 주체μ μ΅μ λ²λ₯Ό κ°λ³μ μΌλ‘ ν μ€νΈνκΈ°κ° λ μ½μ΅λλ€.
μ΅μ λ² ν¨ν΄ ꡬννκΈ°
μ΅μ λ² ν¨ν΄μ ꡬνμ μΌλ°μ μΌλ‘ 주체(Subject)μ μ΅μ λ²(Observer)μ λν μΈν°νμ΄μ€ λλ μΆμ ν΄λμ€λ₯Ό μ μν ν ꡬ체μ μΈ κ΅¬νμ λ°λ¦ λλ€.
κ°λ μ ꡬν (μμ¬ μ½λ):
interface Observer {
update(subject: Subject): void;
}
interface Subject {
attach(observer: Observer): void;
detach(observer: Observer): void;
notify(): void;
}
class ConcreteSubject implements Subject {
private state: any;
private observers: Observer[] = [];
constructor(initialState: any) {
this.state = initialState;
}
attach(observer: Observer): void {
this.observers.push(observer);
}
detach(observer: Observer): void {
this.observers = this.observers.filter(obs => obs !== observer);
}
notify(): void {
for (const observer of this.observers) {
observer.update(this);
}
}
setState(newState: any): void {
this.state = newState;
this.notify();
}
getState(): any {
return this.state;
}
}
class ConcreteObserverA implements Observer {
private subject: ConcreteSubject;
constructor(subject: ConcreteSubject) {
this.subject = subject;
subject.attach(this);
}
update(subject: ConcreteSubject): void {
console.log("ConcreteObserverA: Reacted to the event with state:", subject.getState());
}
}
class ConcreteObserverB implements Observer {
private subject: ConcreteSubject;
constructor(subject: ConcreteSubject) {
this.subject = subject;
subject.attach(this);
}
update(subject: ConcreteSubject): void {
console.log("ConcreteObserverB: Reacted to the event with state:", subject.getState());
}
}
// Usage
const subject = new ConcreteSubject("Initial State");
const observerA = new ConcreteObserverA(subject);
const observerB = new ConcreteObserverB(subject);
subject.setState("New State");
JavaScript/TypeScript μμ:
class Subject {
constructor() {
this.observers = [];
}
subscribe(observer) {
this.observers.push(observer);
}
unsubscribe(observer) {
this.observers = this.observers.filter(obs => obs !== observer);
}
notify(data) {
this.observers.forEach(observer => {
observer.update(data);
});
}
}
class Observer {
constructor(name) {
this.name = name;
}
update(data) {
console.log(`${this.name} received data: ${data}`);
}
}
const subject = new Subject();
const observer1 = new Observer("Observer 1");
const observer2 = new Observer("Observer 2");
subject.subscribe(observer1);
subject.subscribe(observer2);
subject.notify("Hello from Subject!");
subject.unsubscribe(observer2);
subject.notify("Another message!");
μ΅μ λ² ν¨ν΄μ μ€μ μ μ© μ¬λ‘
μ΅μ λ² ν¨ν΄μ μ¬λ¬ μ’ μ κ΅¬μ± μμμ λ³κ²½ μ¬νμ μ νν΄μΌ νλ λ€μν μλ리μ€μμ λΉμ λ°ν©λλ€. λ€μμ λͺ κ°μ§ μΌλ°μ μΈ μ μ© μ¬λ‘μ λλ€:
- μ¬μ©μ μΈν°νμ΄μ€ (UI) μ λ°μ΄νΈ: UI λͺ¨λΈμ λ°μ΄ν°κ° λ³κ²½λ λ ν΄λΉ λ°μ΄ν°λ₯Ό νμνλ λ·°λ μλμΌλ‘ μ λ°μ΄νΈλμ΄μΌ ν©λλ€. μ΅μ λ² ν¨ν΄μ λͺ¨λΈμ΄ λ³κ²½λ λ λ·°μ μ리λ λ° μ¬μ©λ μ μμ΅λλ€. μλ₯Ό λ€μ΄, μ£Όμ μμΈ νμκΈ° μ ν리μΌμ΄μ μ μκ°ν΄ 보μΈμ. μ£Όμ κ°κ²©μ΄ μ λ°μ΄νΈλλ©΄ μ£Όμ μΈλΆ μ 보λ₯Ό νμνλ λͺ¨λ μμ ―μ΄ μ λ°μ΄νΈλ©λλ€.
- μ΄λ²€νΈ μ²λ¦¬: GUI νλ μμν¬ λλ λ©μμ§ νμ κ°μ μ΄λ²€νΈ κΈ°λ° μμ€ν μμ μ΅μ λ² ν¨ν΄μ νΉμ μ΄λ²€νΈκ° λ°μν λ 리μ€λμκ² μ리λ λ° μ¬μ©λ©λλ€. μ΄λ κ΅¬μ± μμκ° λ€λ₯Έ κ΅¬μ± μμ λλ μλΉμ€μμ λ°μνλ μ΄λ²€νΈμ λ°μνλ React, Angular λλ Vueμ κ°μ μΉ νλ μμν¬μμ μμ£Ό λ³Ό μ μμ΅λλ€.
- λ°μ΄ν° λ°μΈλ©: λ°μ΄ν° λ°μΈλ© νλ μμν¬μμ μ΅μ λ² ν¨ν΄μ λͺ¨λΈκ³Ό ν΄λΉ λ·° κ°μ λ°μ΄ν°λ₯Ό λκΈ°ννλ λ° μ¬μ©λ©λλ€. λͺ¨λΈμ΄ λ³κ²½λλ©΄ λ·°λ μλμΌλ‘ μ λ°μ΄νΈλκ³ κ·Έ λ°λλ λ§μ°¬κ°μ§μ λλ€.
- μ€νλ λμνΈ μ ν리μΌμ΄μ : μ€νλ λμνΈμ μ μ΄ μμ λλ©΄ ν΄λΉ μ μ κ°μ μ’ μλ λ€λ₯Έ μ λ μ λ°μ΄νΈλμ΄μΌ ν©λλ€. μ΅μ λ² ν¨ν΄μ μ΄κ²μ΄ ν¨μ¨μ μΌλ‘ μ΄λ£¨μ΄μ§λλ‘ λ³΄μ₯ν©λλ€.
- μ€μκ° λμ보λ: μΈλΆ μμ€μμ λ€μ΄μ€λ λ°μ΄ν° μ λ°μ΄νΈλ μ΅μ λ² ν¨ν΄μ μ¬μ©νμ¬ μ¬λ¬ λμ보λ μμ ―μΌλ‘ λΈλ‘λμΊμ€νΈλμ΄ λμ보λκ° νμ μ΅μ μνλ₯Ό μ μ§νλλ‘ ν μ μμ΅λλ€.
λ°μν νλ‘κ·Έλλ°κ³Ό μ΅μ λ² ν¨ν΄
μ΅μ λ² ν¨ν΄μ λ°μν νλ‘κ·Έλλ°μ κ·Όλ³Έμ μΈ κ΅¬μ± μμμ λλ€. λ°μν νλ‘κ·Έλλ°μ λΉλκΈ° λ°μ΄ν° μ€νΈλ¦Όμ μ²λ¦¬νλλ‘ μ΅μ λ² ν¨ν΄μ νμ₯νμ¬ λ§€μ° λ°μμ μ΄κ³ νμ₯ κ°λ₯ν μ ν리μΌμ΄μ μ ꡬμΆν μ μλλ‘ ν©λλ€.
λ°μν μ€νΈλ¦Ό:
λ°μν μ€νΈλ¦Όμ λ°°μ(backpressure)μ΄ μλ λΉλκΈ° μ€νΈλ¦Ό μ²λ¦¬λ₯Ό μν νμ€μ μ 곡ν©λλ€. RxJava, Reactor, RxJSμ κ°μ λΌμ΄λΈλ¬λ¦¬λ λ°μν μ€νΈλ¦Όμ ꡬννλ©° λ°μ΄ν° μ€νΈλ¦Όμ λ³ν, νν°λ§ λ° κ²°ν©νκΈ° μν κ°λ ₯ν μ°μ°μλ₯Ό μ 곡ν©λλ€.
RxJS (JavaScript) μμ:
const { Observable } = require('rxjs');
const { map, filter } = require('rxjs/operators');
const observable = new Observable(subscriber => {
subscriber.next(1);
subscriber.next(2);
subscriber.next(3);
setTimeout(() => {
subscriber.next(4);
subscriber.complete();
}, 1000);
});
observable.pipe(
filter(value => value % 2 === 0),
map(value => value * 10)
).subscribe({
next: value => console.log('Received: ' + value),
error: err => console.log('Error: ' + err),
complete: () => console.log('Completed')
});
// Output:
// Received: 20
// Received: 40
// Completed
μ΄ μμμμ RxJSλ `Observable`(주체)μ μ 곡νλ©°, `subscribe` λ©μλλ μ΅μ λ²λ₯Ό μμ±ν μ μλλ‘ ν©λλ€. `pipe` λ©μλλ `filter` λ° `map`κ³Ό κ°μ μ°μ°μλ₯Ό μ°κ²°νμ¬ λ°μ΄ν° μ€νΈλ¦Όμ λ³νν μ μλλ‘ ν©λλ€.
μ¬λ°λ₯Έ ꡬν μ ννκΈ°
μ΅μ λ² ν¨ν΄μ ν΅μ¬ κ°λ μ μΌκ΄λκ² μ μ§λμ§λ§, νΉμ ꡬνμ μ¬μ© μ€μΈ νλ‘κ·Έλλ° μΈμ΄ λ° νλ μμν¬μ λ°λΌ λ€λ₯Ό μ μμ΅λλ€. λ€μμ ꡬνμ μ νν λ κ³ λ €ν΄μΌ ν λͺ κ°μ§ μ¬νμ λλ€:
- λ΄μ₯ μ§μ: λ§μ μΈμ΄μ νλ μμν¬λ μ΄λ²€νΈ, λΈλ¦¬κ²μ΄νΈ λλ λ°μν μ€νΈλ¦Όμ ν΅ν΄ μ΅μ λ² ν¨ν΄μ λν λ΄μ₯ μ§μμ μ 곡ν©λλ€. μλ₯Ό λ€μ΄, C#μλ μ΄λ²€νΈ λ° λΈλ¦¬κ²μ΄νΈκ° μκ³ , Javaμλ `java.util.Observable` λ° `java.util.Observer`κ° μμΌλ©°, JavaScriptμλ μ¬μ©μ μ μ μ΄λ²€νΈ μ²λ¦¬ λ©μ»€λμ¦κ³Ό λ°μν νμ₯(RxJS)μ΄ μμ΅λλ€.
- μ±λ₯: μ΅μ λ² ν¨ν΄μ μ±λ₯μ μ΅μ λ²μ μμ μ λ°μ΄νΈ λ‘μ§μ 볡μ‘μ±μ μν₯μ λ°μ μ μμ΅λλ€. κ³ λΉλ μλ리μ€μμ μ±λ₯μ μ΅μ ννκΈ° μν΄ μ€λ‘νλ§(throttling) λλ λλ°μ΄μ±(debouncing)κ³Ό κ°μ κΈ°μ μ μ¬μ©νλ κ²μ κ³ λ €νμμμ€.
- μ€λ₯ μ²λ¦¬: ν μ΅μ λ²μ μ€λ₯κ° λ€λ₯Έ μ΅μ λ²λ 주체μ μν₯μ λ―ΈμΉλ κ²μ λ°©μ§νκΈ° μν΄ κ°λ ₯ν μ€λ₯ μ²λ¦¬ λ©μ»€λμ¦μ ꡬννμμμ€. λ°μν μ€νΈλ¦Όμμ try-catch λΈλ‘ λλ μ€λ₯ μ²λ¦¬ μ°μ°μλ₯Ό μ¬μ©νλ κ²μ κ³ λ €νμμμ€.
- μ€λ λ μμ μ±: μ£Όμ²΄κ° μ¬λ¬ μ€λ λμ μν΄ μ‘μΈμ€λλ κ²½μ°, κ²½μ 쑰건(race condition) λ° λ°μ΄ν° μμμ λ°©μ§νκΈ° μν΄ μ΅μ λ² ν¨ν΄ ꡬνμ΄ μ€λ λμ μμ νμ§ νμΈνμμμ€. μ κΈ(locks) λλ λμ λ°μ΄ν° ꡬ쑰μ κ°μ λκΈ°ν λ©μ»€λμ¦μ μ¬μ©νμμμ€.
νΌν΄μΌ ν μΌλ°μ μΈ ν¨μ
μ΅μ λ² ν¨ν΄μ μλΉν μ΄μ μ μ 곡νμ§λ§, μ μ¬μ μΈ ν¨μ μ μλ κ²μ΄ μ€μν©λλ€:
- λ©λͺ¨λ¦¬ λμ: μ΅μ λ²κ° 주체λ‘λΆν° μ λλ‘ λΆλ¦¬λμ§ μμΌλ©΄ λ©λͺ¨λ¦¬ λμλ₯Ό μΌμΌν¬ μ μμ΅λλ€. λ μ΄μ νμνμ§ μμ λ μ΅μ λ²κ° ꡬλ μ ν΄μ§νλλ‘ νμμμ€. κ°μ²΄κ° λΆνμνκ² μ΄μ μλ κ²μ λ°©μ§νκΈ° μν΄ μ½ν μ°Έμ‘°(weak references)μ κ°μ λ©μ»€λμ¦μ νμ©νμμμ€.
- μν μ’ μμ±: 주체μ μ΅μ λ²κ° μλ‘μκ² μμ‘΄νλ©΄ μν μ’ μμ± λ° λ³΅μ‘ν κ΄κ³λ‘ μ΄μ΄μ§ μ μμ΅λλ€. μνμ νΌνλλ‘ μ£Όμ²΄μ μ΅μ λ² κ°μ κ΄κ³λ₯Ό μ μ€νκ² μ€κ³νμμμ€.
- μ±λ₯ λ³λͺ© νμ: μ΅μ λ² μκ° λ§€μ° λ§μΌλ©΄ λͺ¨λ μ΅μ λ²μκ² μ리λ κ²μ΄ μ±λ₯ λ³λͺ© νμμ΄ λ μ μμ΅λλ€. μλ¦Ό μλ₯Ό μ€μ΄κΈ° μν΄ λΉλκΈ° μλ¦Ό λλ νν°λ§κ³Ό κ°μ κΈ°μ μ μ¬μ©νλ κ²μ κ³ λ €νμμμ€.
- 볡μ‘ν μ λ°μ΄νΈ λ‘μ§: μ΅μ λ²μ μ λ°μ΄νΈ λ‘μ§μ΄ λ무 볡μ‘νλ©΄ μμ€ν μ μ΄ν΄νκ³ μ μ§λ³΄μνκΈ° μ΄λ €μμ§ μ μμ΅λλ€. μ λ°μ΄νΈ λ‘μ§μ κ°λ¨νκ³ μ§μ€μ μΌλ‘ μ μ§νμμμ€. 볡μ‘ν λ‘μ§μ λ³λμ ν¨μλ ν΄λμ€λ‘ 리ν©ν λ§νμμμ€.
κΈλ‘λ² κ³ λ € μ¬ν
μ μΈκ³ μ¬μ©μλ₯Ό λμμΌλ‘ μ΅μ λ² ν¨ν΄μ μ¬μ©νμ¬ μ ν리μΌμ΄μ μ μ€κ³ν λ λ€μ μμλ₯Ό κ³ λ €νμμμ€:
- νμ§ν: μ΅μ λ²μκ² νμλλ λ©μμ§μ λ°μ΄ν°κ° μ¬μ©μμ μΈμ΄ λ° μ§μμ λ°λΌ νμ§νλλλ‘ νμμμ€. λ€μν λ μ§ νμ, μ«μ νμ λ° ν΅ν κΈ°νΈλ₯Ό μ²λ¦¬νκΈ° μν΄ κ΅μ ν λΌμ΄λΈλ¬λ¦¬ λ° κΈ°μ μ μ¬μ©νμμμ€.
- μκ°λ: μκ°μ λ―Όκ°ν μ΄λ²€νΈλ₯Ό μ²λ¦¬ν λ μ΅μ λ²μ μκ°λλ₯Ό κ³ λ €νκ³ κ·Έμ λ°λΌ μλ¦Όμ μ‘°μ νμμμ€. UTCμ κ°μ νμ€ μκ°λλ₯Ό μ¬μ©νκ³ μ΅μ λ²μ νμ§ μκ°λλ‘ λ³ννμμμ€.
- μ κ·Όμ±: μλ¦Όμ΄ μ₯μ κ° μλ μ¬μ©μμκ²λ μ κ·Ό κ°λ₯νλλ‘ νμμμ€. μ μ ν ARIA μμ±μ μ¬μ©νκ³ μ€ν¬λ¦° 리λλ‘ μ½ν μΈ λ₯Ό μ½μ μ μλμ§ νμΈνμμμ€.
- λ°μ΄ν° κ°μΈ μ 보 보νΈ: GDPR λλ CCPAμ κ°μ μ¬λ¬ κ΅κ°μ λ°μ΄ν° κ°μΈ μ 보 λ³΄νΈ κ·μ μ μ€μνμμμ€. νμν λ°μ΄ν°λ§ μμ§ λ° μ²λ¦¬νκ³ μ¬μ©μλ‘λΆν° λμλ₯Ό μ»μλμ§ νμΈνμμμ€.
κ²°λ‘
μ΅μ λ² ν¨ν΄μ λ°μν, νμ₯ κ°λ₯νλ©° μ μ§λ³΄μ κ°λ₯ν μ ν리μΌμ΄μ μ ꡬμΆνκΈ° μν κ°λ ₯ν λꡬμ λλ€. 주체μ μ΅μ λ²λ₯Ό λΆλ¦¬ν¨μΌλ‘μ¨ λ³΄λ€ μ μ°νκ³ λͺ¨λνλ μ½λλ² μ΄μ€λ₯Ό μμ±ν μ μμ΅λλ€. λ°μν νλ‘κ·Έλλ° μμΉ λ° λΌμ΄λΈλ¬λ¦¬μ κ²°ν©λ λ μ΅μ λ² ν¨ν΄μ λΉλκΈ° λ°μ΄ν° μ€νΈλ¦Όμ μ²λ¦¬νκ³ κ³ λλ‘ μνΈμμ©νλ©° μ€μκ° μ ν리μΌμ΄μ μ ꡬμΆν μ μλλ‘ ν©λλ€. μ΅μ λ² ν¨ν΄μ ν¨κ³Όμ μΌλ‘ μ΄ν΄νκ³ μ μ©νλ κ²μ νΉν μ€λλ μ μ λ λμ μ΄κ³ λ°μ΄ν° μ€μ¬μ μΈ μΈμμμ μννΈμ¨μ΄ νλ‘μ νΈμ νμ§κ³Ό μν€ν μ²λ₯Ό ν¬κ² ν₯μμν¬ μ μμ΅λλ€. λ°μν νλ‘κ·Έλλ°μ λ κΉμ΄ νκ³ λ€μλ‘ μ΅μ λ² ν¨ν΄μ΄ λ¨μν λμμΈ ν¨ν΄μ΄ μλλΌ λ§μ λ°μν μμ€ν μ κΈ°μ΄κ° λλ κ·Όλ³Έμ μΈ κ°λ μμ μκ² λ κ²μ λλ€.
μ μΆ©μ κ³Ό μ μ¬μ μΈ ν¨μ μ μ μ€νκ² κ³ λ €ν¨μΌλ‘μ¨ μ΅μ λ² ν¨ν΄μ νμ©νμ¬ μ μΈκ³ μ΄λμ μλ μ¬μ©μ μꡬλ₯Ό μΆ©μ‘±νλ κ°λ ₯νκ³ ν¨μ¨μ μΈ μ ν리μΌμ΄μ μ ꡬμΆν μ μμ΅λλ€. κ³μν΄μ νμνκ³ , μ€ννκ³ , μ΄λ¬ν μμΉμ μ μ©νμ¬ μ§μ μΌλ‘ λμ μ΄κ³ λ°μμ μΈ μ루μ μ λ§λμμμ€.